package com.bocloud.cmp.interfaces.resource;

import java.util.List;
import java.util.Map;

import com.bocloud.cmp.entity.resource.CloudServer;
import com.bocloud.cmp.model.CloudServerBean;
import com.bocloud.common.model.BsmResult;
import com.bocloud.common.model.Param;

/**
 * 云主机实现类接口
 * 
 * @author DZG
 * @since V1.0 2016年9月12日
 */
public interface CloudServerService {

    /**
     * 查询云主机列表
     * 
     * @param page
     *            the page
     * @param rows
     *            the rows
     * @param params
     *            the params
     * @param sorter
     *            the sorter
     * @param simple
     *            the simple
     * @return the result
     */
    public BsmResult list(int page, int rows, List<Param> params, Map<String, String> sorter, Boolean simple);

    /**
     * 添加云主机
     * 
     * @param params
     * @param userId
     * @return
     */
    public BsmResult create(String params, Long userId);

    /**
     * 克隆云主机
     * 
     * @param params
     * @param userId
     * @return
     */
    public BsmResult clone(String params, Long userId);

    /**
     * 
     * @param params
     * @param userId
     * @return
     */
    public BsmResult migrate(String params, Long userId);

    /**
     * 迁移(openstack)
     * 
     * @param Server
     * @param userId
     * @return
     */
    public BsmResult OSMigrate(String params, Long userId);

    /**
     * 创建快照
     * 
     * @param params
     * @param userId
     * @return
     */
    public BsmResult snapshot(String params, Long userId);

    /**
     * 更新云主机
     * 
     * @param bean
     *            the bean
     * @param userId
     *            the user id
     * @return the result
     */
    public BsmResult modify(CloudServerBean bean, Long userId);

    /**
     * 逻辑删除云主机
     * 
     * @param id
     *            the id
     * @param id
     *            the user id
     * @return the result
     */
    public BsmResult remove(Long id, Long userId);

    /**
     * 得到当前云主机的基本信息和统计信息
     * 
     * @param id
     *            the id
     * @return the result
     */
    public BsmResult detail(Long id);

    /**
     * 启动云主机
     * 
     * @param id
     *            the id
     * @param id
     *            the user id
     * @return the result
     */
    public BsmResult start(Long id, Long userId);

    /**
     * 虚拟机批量重启
     * 
     * @param params
     * @param userId
     * @return
     */
    public BsmResult batchReboot(String params, Long userId);

    /**
     * 虚拟机批量启动
     * 
     * @param params
     * @param userId
     * @return
     */
    public BsmResult batchStart(String params, Long userId);

    /**
     * 虚拟机批量停止
     * 
     * @param parms
     * @param userId
     * @return
     */
    public BsmResult batchStop(String parms, Long userId);

    /**
     * 虚拟机批量删除
     * 
     * @param params
     * @param userId
     * @return
     */
    public BsmResult batchRemove(String params, Long userId);

    /**
     * 关闭云主机
     * 
     * @param id
     *            the id
     * @param id
     *            the user id
     * @return the result
     */
    public BsmResult stop(Long id, Long userId);

    /**
     * 重启云主机
     * 
     * @param id
     *            the id
     * @param id
     *            the user id
     * @return the result
     */
    public BsmResult restart(Long id, Long userId);

    /**
     * 暂停
     * 
     * @param id
     * @param userId
     * @return
     */
    public BsmResult pause(Long id, Long userId);

    /**
     * 挂起
     * 
     * @param id
     * @param userId
     * @return
     */
    public BsmResult suspend(Long id, Long userId);

    /**
     * 激活
     * 
     * @param id
     * @param userId
     * @return
     */
    public BsmResult active(Long id, Long userId);

    /**
     * 备份云主机
     */
    public BsmResult backup(Long id, Long userId);

    /**
     * 恢复云主机
     * 
     * @param id
     *            the id
     * @param id
     *            the user id
     * @return the result
     */
    public BsmResult recovery(Long id, Long userId);

    /**
     * 通过IP查询当前云主机信息
     * 
     * @author sxp
     * @since V1.0 Nov 4, 2016
     */
    public CloudServer detail(String ip);

    /**
     * 获取所有虚拟机的uuid和ip
     * <p>
     * 使用SNMP自动发现采集对象时使用
     * </p>
     * 
     * @author sxp
     * @since V1.0 Dec 5, 2016
     */
    public List<Map<String, String>> getAll4Snmp();

    /**
     * 查询性能数据
     * 
     * @param params
     * @return
     */
    public BsmResult getPerformance(String params);

    /**
     * vnc console接口
     * 
     * @param params
     * @return
     */
    public BsmResult vncconsole(String params);

    public BsmResult networks(Long id);

    /**
     * 获取虚拟机ip地址
     * 
     * @param instanceId
     * @return
     */
    public BsmResult serverIps(String instanceId);

    /**
     * 恢复云主机
     * 
     * @param id
     *            the id
     * @param id
     *            the user id
     * @return the result
     */
    public BsmResult unpause(Long id, Long userId);
}
